//
// Created by deepin on 2020/11/12.
//
#include <iostream>
#include "stock20.h"
Stock2::Stock2()
{
    company = "no name";
    shares = 0;
    share_val = 0.0;
    total_val = 0.0;
}

Stock2::Stock2(const std::string &co, long n, double pr)
{
    company = co;
    if(n<0)
    {
      std::cout << "Number of shares can't be negative;"
        << company << " Shares set to 0\n";
      shares = 0;
    }
    else shares = n;
    share_val = pr;
    set_tot();
}

Stock2::~Stock2()
{

}

void Stock2::buy(long num, double price)
{
    if (num < 0)
    {
       std::cout << "Number of shares purchased can't be negative."
         << "Transaction is aborted \n";
    }
    else
    {
       shares +=num;
       share_val = price;
       set_tot();
    }
}

void Stock2::sell(long num, double price)
{
    using std::cout;
    if(num <0)
    {
       cout << "Number of shares sold can't be negative. "
         << "Transaction is aborted\n";
    }
    else if(num > shares)
    {
        cout << "You can't sell more than you have!"
             << "Transaction is aborted\n";
    }
    else
    {
        shares -=num;
        share_val = price;
        set_tot();
    }
}

void Stock2::update(double price)
{
    share_val = price;
    set_tot();
}

void Stock2::show() const
{
    using std::cout;
    using std::ios_base;
    ios_base::fmtflags orig =
            cout.setf(ios_base::fixed,ios_base::floatfield);
    std::streamsize prec = cout.precision(2);
    cout << "Company:" <<company
       << " Shares:" <<shares << "\n";
    cout << " Share Price:$"<<share_val;
    cout.precision(2);
    cout << " Total worth:$"<<total_val << "\n";
    cout.setf(orig,ios_base::floatfield);
    cout.precision(prec);
}

const Stock2 & Stock2::topval(const Stock2 &s) const
{
    if(s.total_val > total_val) return s;
    else return *this;
}